LOCKING

            
#include <sys\locking.h>
#include <io.h>        требуется только для объявления функции
int locking(handle,mode,nbyte);
int handle;            файловый handle
int mode;              режим блокировки файла
int nbyte;             число блокированных байтов

Описание.
Функция locking блокирует или разблокирует байты nbytes файла, определенного по handle . Блокировка байтов в файле не разрешает последующего чтения и записи этих байтов другими процессами. Разблокировка файла разрешает другим процессам читать или записывать в байты, заблокированные ранее. Блокирование или разблокирование начинается с текущей позиции указателя на файл и распространяется до следующих nbyte байтов или до конца файла.
Аргумент mode определяет выполняемые действия блокировки.
Он может быть одной из следующих manifest-констант.

                           
         Мanifest-константа                Значение
                           
         LK_LOCK           Блокировка заданных байтов. Если  байты
                           не      заблокировались,     происходит
                           повторная попытка  блокировки  через  1
                           секунду. Если после 10 попыток байты не
                           заблокировались, возвращается ошибка.
                           
         LK_RLCK           Аналогично LK_LOCK.
                           
         LK_NBLCK          Блокировка заданных байтов.  Если байты
                           не заблокированы, возвращается ошибка.
                           
         LK_NRLCK          Аналогично LK_NBLCK.
                           
         LK_UNLCK          Разблокировка  заданных  байтов.  Байты
                           должны быть ранее заблокированы.

Для файла может быть заблокирована более чем одна область, но работа с перекрытыми областями не допускается. Кроме того, в одно и то же время не может быть разблокирована более чем одна область.
Когда файл разблокируется, область разблокируемого файла должна соответствовать ранее заблокированной области. Функция locking не может разблокировать одновременно смежные области, так как если две области являются смежными, каждая область должна быть разблокирована отдельно.
Все блокировки должны быть удалены перед закрытием файла или перед выходом из программы.

Возвращаемое значение.
Функция locking возвращает 0, если она успешно выполнилась.
Возвращаемое значение -1 свидетельствует о неудаче и errno устанавливается в одно из следующих значений:

           
         Значение                          Его смысл
            
         EACCES            принудительная блокировка (файл  всегда
                           блокирован или разблокирован).
                           
         EBADF             неверный файловый handle.
                           
         EDEADLOCK         принудительная блокировка. Это значение
                           возвращается,  если задан фллаг LK_LOCK
                           или  LK_RLCK, и файл  не   может   быть

Замечание!
Функция locking может быть использована только для версий MS DOS 3.0 и последующих, в ранних версиях MS DOS она не дает никакого результата.

Пример:

               #include <io.h>
               #include <sys\locking.h>
               #include <stdlib.h>
               extern unsigned char _osmajor;
               int fh;
               long pos;
               .
               .
               .
               /*  сохранить текущую позицию указателя на файл, затем бло-
         кировать область от начала файла до сохраненной позиции указателя
         на файл */
               if (_osmajor >= 3)  {
                  pos=tell(fh);
                  lseek(fh, OL, O);
                  if ((locking(fh, LK_NBLCK,pos)) != -1)  {
                  .
                  .
                  .
                  lseek(fh, OL, O);
                  locking((fh, LK_UNLCK, pos);
                                                           }
                                    }
      
            
Hosted by uCoz